package webServer

import (
	"fmt"
	"net/http"
)

var (
	// 处理方法集合
	// Key:API名
	handlerData = make(map[string]*ApiHandler, 4)

	// 文档方法
	remarkFunc func(w http.ResponseWriter, r *http.Request)
)

// 注册文档api方法
func RegisterRemarkFunc(_remarkFunc func(w http.ResponseWriter, r *http.Request)) {
	remarkFunc = _remarkFunc
}

// 注册处理方法
// apiName：API名称
// callback：回调方法
// paramNames：参数名称集合
func RegisterHandleFunc(apiName string, callback HandleFunc, paramNames ...string) {
	apiFullName := fmt.Sprintf("/API/%s", apiName)

	if _, exist := handlerData[apiFullName]; exist {
		panic(fmt.Errorf("重复注册处理函数:%s", apiFullName))
	}

	handlerData[apiFullName] = newApiHandler(apiFullName, callback, paramNames...)
}

// 获取请求方法
// funcName:方法名称
// 返回值:
// 请求方法
// 是否存在
func GetHandleFunc(apiFullName string) (*ApiHandler, bool) {
	if requestFuncObj, exists := handlerData[apiFullName]; exists {
		return requestFuncObj, exists
	}

	return nil, false
}
